from app import db
import json
from datetime import datetime

class Setting(db.Model):
    __tablename__ = 'settings'
    
    id = db.Column(db.Integer, primary_key=True)
    focus_duration = db.Column(db.Integer, default=25)  # 专注时长（分钟）
    short_break_duration = db.Column(db.Integer, default=5)  # 短休息时长（分钟）
    long_break_duration = db.Column(db.Integer, default=15)  # 长休息时长（分钟）
    long_break_interval = db.Column(db.Integer, default=4)  # 长休息间隔（专注次数）
    auto_start_break = db.Column(db.Boolean, default=True)  # 是否自动开始休息
    auto_start_focus = db.Column(db.Boolean, default=False)  # 是否自动开始下一个专注
    notification = db.Column(db.Text, default='{"enabled": true, "sound": true}')  # 通知设置（JSON）
    sound = db.Column(db.Text, default='{"enabled": true, "volume": 80}')  # 声音设置（JSON）
    theme = db.Column(db.Text, default='{"mode": "light", "color": "blue"}')  # 主题设置（JSON）
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    
    def to_dict(self):
        return {
            'id': self.id,
            'focus_duration': self.focus_duration,
            'short_break_duration': self.short_break_duration,
            'long_break_duration': self.long_break_duration,
            'long_break_interval': self.long_break_interval,
            'auto_start_break': self.auto_start_break,
            'auto_start_focus': self.auto_start_focus,
            'notification': json.loads(self.notification) if isinstance(self.notification, str) else self.notification,
            'sound': json.loads(self.sound) if isinstance(self.sound, str) else self.sound,
            'theme': json.loads(self.theme) if isinstance(self.theme, str) else self.theme,
            'created_at': self.created_at.isoformat() if self.created_at else None,
            'updated_at': self.updated_at.isoformat() if self.updated_at else None
        }
    
    def set_json_field(self, field_name, value):
        """设置JSON字段的辅助方法"""
        if value is None:
            return
        
        if isinstance(value, str):
            try:
                # 确保是有效的JSON
                json.loads(value)
                setattr(self, field_name, value)
            except:
                pass
        else:
            # 如果是dict或其他对象，转换为JSON字符串
            try:
                json_str = json.dumps(value)
                setattr(self, field_name, json_str)
            except:
                pass 